#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
#include<pthread.h>


/*
	杀死线程，必须具备取消点
		所有能够进入系统内核的系统调用函数都具备取消点（printf,read,write）
		也可以自己设置	
*/

int g_val = 9;

void* mythread(void *arg)
{
	while(1)
	{
		int a;
		int b;
		//设置取消点
		pthread_testcancel();
	}
}


int main()
{
	int num = 99;
	pthread_t thread; //返回线程号	
	int ret = pthread_create(&thread,NULL,mythread,&num);
	if(ret != 0)
	{
		printf("thread creat error,[%s]\n",strerror(ret));
		return -1;
	} 

	printf("parent thread,pid=[%d],id=[%ld]\n",getpid(),pthread_self());

	//设置线程为分离属性
	//pthread_detach(thread);

	//取消线程
	pthread_cancel(thread);
	//用pthread_join测试.如果为分离属性，则此函数不阻塞
	int res = pthread_join(thread,NULL);
	if(res!=0)
	{
		printf("pthread_join error:[%s]\n",strerror(res));
	}

	sleep(1);
	return 0;
}
